package com.ftg.learn.chapter18;

import com.sun.org.apache.xpath.internal.SourceTree;

import java.time.Clock;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalUnit;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;

/**
 * 学习java与数据表的关系
 * @author KangJx
 * @date 2021/8/19
 */
public class LeranTable {

    //我用这个student代表一个表
    List<Student> student;

    public  LeranTable(){
        student = new ArrayList<>(3);
    }

    /**
     * insert into values 是不是就是添加操作
     * 向表里面添加一行数据
     */
    public void insert(String sname,char sex,int age){
        student.add(new Student(sname,sex,age));
    }

    /**
     * 查询
     */
    public void select(Consumer<Student> x){

        for(Student s : student){
            x.accept(s);
        }
    }

    public void where(Predicate<Student> x){

        for(Student s : student){
           x.test(s);
        }
    }

    public static void main(String[] args) {
//        new LeranTable();相当于创建一个表
        LeranTable lt = new LeranTable();
        lt.insert("张三",'男',13);
        lt.insert("张三1",'男',13);
        lt.insert("张三2",'男',13);
        lt.insert("张三3",'男',13);
        lt.insert("李二狗",'男',13);

        lt.select(x-> System.out.println(x.getSname()));
        lt.where(x->x.getAge()>15);

        LocalDate l = LocalDate.parse("2009-09-09").minus(1, ChronoUnit.YEARS);

        System.out.println(l.toString());
    }
    /**
     * 综合上述知识点：
     *
     * java 集合就是按照特定的数据结构进行存储和组织数据的类
     * table 数据库(rdbms)里的表,照特定的数据结构进行存储和组织数据
     *
     * java - collection database - table 功能不一样？
     *
     * 所以我们在学习sql的语句的时候:
     * 1、java 集合里面的数据是存储在 disk memory?
     * -- jvm -- 五大功能区域的 堆 堆 jdk1.8常量池 不是在方法区里了  方法区  元空间了 ，常量池-堆
     * --堆在jvm -- 内存里面的一块特殊区域 memory里面了！ main -执行以后我们把数据存储到内存里，java application结束资源释放
     * Gc回收的承认不？
     * 空间有限  快
     *
     * 2、table 数据是存储在 disk memory?
     *  disk里面了：每天打开这个数据全在？ 硬盘限制 空间大  运算慢
     *
     *  你要把大量永远存储的数据 表
     *  需要快速访问 少量的数据 java collection
     *
     *  2000位是多少？
     *  李银龙   1 1 2 3 5 8 13 21
     *  java - long 存不了2000位  用数据库  或者字符串，bigdecimal
     *
     *
     *  京东 ： 大db - >python java - > go
     *  txt 没有结构 查询 数据慢
     *
     */

    /**
     * 这个是一个java：
     *
     * Student 类就是一个模板，这个模板代表所有实例具有的特征
     *
     * new Student();代表了一个学生
     *
     * List<Student> 很多很多学生?
     *
     * new Student()一次，可以带表数据库learnmysql里面把 表student的一行信息
     *
     * 1对  2错
     */
    class Student{

        private String sname;

        private char sex;

        private int age;

        public Student(String sname, char sex, int age) {
            this.sname = sname;
            this.sex = sex;
            this.age = age;
        }

        public String getSname() {
            return sname;
        }

        public void setSname(String sname) {
            this.sname = sname;
        }

        public char getSex() {
            return sex;
        }

        public void setSex(char sex) {
            this.sex = sex;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }

}
